<template>
  <UploadExcel :before-upload="beforeUpload" :on-success="onSuccess" />
</template>
<script>
// 这个文件是导入excel文件并解析成数据
import { reqImportEmployee } from '@/api/employees'
export default {
  name: 'Import',
  methods: {
    async onSuccess(data) {
      // 需要在这个函数中要得到解析后的excel数据
      // 需要将解析的员工信息传递给后端
      console.log(data)
      const ret = this.translateData(data.results)
      // console.log(ret)
      try {
        const res = await reqImportEmployee(ret)
        console.log(res)
        if (res.code === 10000) {
          // 批量导入成功
          this.$router.push('/employees')
          this.$$message.success('批量导入成功')
        } else {
          this.$message.error('批量导入失败')
        }
      } catch (err) {
        console.log(err)
        this.$message.error('批量导入失败')
      }
    },
    // 子传父
    beforeUpload(file) {
      console.log(file)
      if (file.name.endsWith('.xlsx')) {
        return true
      } else {
        this.$message.error('文件格式错误')
        return false
      }
    },
    // 后端需要的数据格式
    // const info =[  {
    //     username:'张飞',
    //     mobile:15200011111,
    //     workNumber:'1458',
    //     timeOfEntry:'2022-01-01',
    //     correctionTime:'2022-01-01'
    //   }]
    // 将中文的键值对转换成英文的
    // 创建一个函数用来转换数据形式
    // 把数字格式的日期转换为年月日
    formatDate(numb, format) {
      const time = new Date((numb - 1) * 24 * 3600000 + 1)
      time.setYear(time.getFullYear() - 70)
      const year = time.getFullYear() + ''
      const month = time.getMonth() + 1 + ''
      const date = time.getDate() - 1 + ''
      if (format && format.length === 1) {
        return year + format + (month < 10 ? '0' + month : month) + format + (date < 10 ? '0' + date : date)
      }
      return year + (month < 10 ? '0' + month : month) + (date < 10 ? '0' + date : date)
    },
    translateData(data) {
      // 这里的data是接收的形参
      // 1.创建一个空的数组，用来存储最终的值
      const result = []
      // 2.创建一个新的对象,用来对应中英文关系
      const zhEnMap = {
        入职日期: 'timeOfEntry',
        姓名: 'username',
        工号: 'workNumber',
        手机号: 'mobile',
        转正日期: 'correctionTime'
      }
      // 3.遍历没一行数据
      data.forEach(row => {
        // 转换单行的数据信息
        // 4.创建一个新的对象，用来存储每一行转换出来的数据
        const rowInfo = {}
        // 5.遍历中英文的对象,拿到英文
        for (const key in zhEnMap) {
          // key是中文名称，enName是对应的英文名称
          const enName = zhEnMap[key]
          // 根据中文的名称获取对应的值
          const value = row[key]
          // 把英文键值对添加到对象中
          // 只有日期需要做转换
          if (['timeOfEntry', 'correctionTime'].includes(enName)) {
            // 日期格式需要转换
            rowInfo[enName] = this.formatDate(value)
          } else {
            rowInfo[enName] = value
          }
        }
        // 把单行信息放到结果列表中
        result.push(rowInfo)
      })
      return result
    }
  }
}
</script>

<style></style>
